/******************************************************************************
 * @file     descriptors.c
 * @brief    NANO100 series USBD driver source file
 * @version  2.0.0
 * @date     22, Sep, 2014
 *
 * @note
 * Copyright (C) 2014 Nuvoton Technology Corp. All rights reserved.
 ******************************************************************************/
/*!<Includes */
#include "Nano100Series.h"
#include "hg-hmd.h"

/*----------------------------------------------------------------------------*/
/*!<USB Device Descriptor */
uint8_t gu8DeviceDescriptor[] = {
    LEN_DEVICE,         /* bLength */
    DESC_DEVICE,        /* bDescriptorType */
    0x10, 0x01,         /* bcdUSB */
    0x00,               /* bDeviceClass */
    0x00,               /* bDeviceSubClass */
    0x00,               /* bDeviceProtocol */
    EP0_MAX_PKT_SIZE,   /* bMaxPacketSize0 */
    /* idVendor */
    USBD_VID & 0x00FF,
    (USBD_VID & 0xFF00) >> 8,
    /* idProduct */
    USBD_PID & 0x00FF,
    (USBD_PID & 0xFF00) >> 8,
    0x01, 0x00,        /* bcdDevice */
    0x01,              /* iManufacture */
    0x02,              /* iProduct */
    0x03,              /* iSerialNumber -  is required for BOT device */
    0x01               /* bNumConfigurations */
};

/*!<USB Configure Descriptor */
uint8_t gu8ConfigDescriptor[] = {
    LEN_CONFIG,                                         // bLength
    DESC_CONFIG,                                        // bDescriptorType
    (LEN_CONFIG+LEN_INTERFACE+LEN_ENDPOINT*6), 0x00,    // wTotalLength
    0x01,                                               // bNumInterfaces
    0x01,                                               // bConfigurationValue
    0x00,                                               // iConfiguration
    0xC0,                                               // bmAttributes
    0x32,                                               // MaxPower

    /* const BYTE cbyInterfaceDescriptor[LEN_INTERFACE] = */
    LEN_INTERFACE,  // bLength
    DESC_INTERFACE, // bDescriptorType
    0x00,           // bInterfaceNumber
    0x00,           // bAlternateSetting
    0x06,           // bNumEndpoints
    0xFF,           // bInterfaceClass
    0xFF,           // bInterfaceSubClass
    0xFF,           // bInterfaceProtocol
    0x00,           // iInterface

    /* const BYTE cbyEndpointDescriptor1[LEN_ENDPOINT] = */
    LEN_ENDPOINT,           // bLength
    DESC_ENDPOINT,          // bDescriptorType
    (EP_INPUT | BULK_IN_EP_NUM_1),                   // bEndpointAddress
    EP_BULK,                // bmAttributes
    EP2_MAX_PKT_SIZE, 0x00, // wMaxPacketSize
    0x00,                   // bInterval

    /* const BYTE cbyEndpointDescriptor2[LEN_ENDPOINT] = */
    LEN_ENDPOINT,           // bLength
    DESC_ENDPOINT,          // bDescriptorType
    (EP_OUTPUT | BULK_OUT_EP_NUM_1),                   // bEndpointAddress
    EP_BULK,                // bmAttributes
    EP3_MAX_PKT_SIZE, 0x00, // wMaxPacketSize
    0x00,                    // bInterval

	/* const BYTE cbyEndpointDescriptor1[LEN_ENDPOINT] = */
    LEN_ENDPOINT,           // bLength
    DESC_ENDPOINT,          // bDescriptorType
    (EP_INPUT | BULK_IN_EP_NUM_2),                   // bEndpointAddress
    EP_BULK,                // bmAttributes
    EP4_MAX_PKT_SIZE, 0x00, // wMaxPacketSize
    0x00,                   // bInterval

    /* const BYTE cbyEndpointDescriptor2[LEN_ENDPOINT] = */
    LEN_ENDPOINT,           // bLength
    DESC_ENDPOINT,          // bDescriptorType
    (EP_OUTPUT | BULK_OUT_EP_NUM_2),                   // bEndpointAddress
    EP_BULK,                // bmAttributes
    EP5_MAX_PKT_SIZE, 0x00, // wMaxPacketSize
    0x00,                    // bInterval

	/* const BYTE cbyEndpointDescriptor1[LEN_ENDPOINT] = */
    LEN_ENDPOINT,           // bLength
    DESC_ENDPOINT,          // bDescriptorType
    (EP_INPUT | BULK_IN_EP_NUM_3),                   // bEndpointAddress
    EP_BULK,                // bmAttributes
    EP6_MAX_PKT_SIZE, 0x00, // wMaxPacketSize
    0x00,                   // bInterval

    /* const BYTE cbyEndpointDescriptor2[LEN_ENDPOINT] = */
    LEN_ENDPOINT,           // bLength
    DESC_ENDPOINT,          // bDescriptorType
    (EP_OUTPUT | BULK_OUT_EP_NUM_3),                   // bEndpointAddress
    EP_BULK,                // bmAttributes
    EP7_MAX_PKT_SIZE, 0x00, // wMaxPacketSize
    0x00                    // bInterval
};

/*!<USB Language String Descriptor */
uint8_t gu8StringLang[4] = {
    4,              /* bLength */
    DESC_STRING,    /* bDescriptorType */
    0x09, 0x04
};

/*!<USB Vendor String Descriptor */
uint8_t gu8VendorStringDesc[] = {
    16,
    DESC_STRING,
    'H', 0, 'a', 0, 'i', 0, 'j', 0, 'i', 0, 'n', 0, 'g', 0
};

/*!<USB Product String Descriptor */
uint8_t gu8ProductStringDesc[] = {
    28,             /* bLength          */
    DESC_STRING,    /* bDescriptorType  */
    'H', 0, 'i', 0, 'g', 0, 'h', 0, 'g', 0, 'l', 0, 'a', 0, 's', 0, 's', 0, ' ', 0, 'H', 0, 'M', 0, 'D', 0,
};

uint8_t gu8StringSerial[] =
{
    6,             // bLength
    DESC_STRING,    // bDescriptorType
    'H', 0, '2', 0
};


uint8_t *gpu8UsbString[4] =
{
    gu8StringLang,
    gu8VendorStringDesc,
    gu8ProductStringDesc,
    gu8StringSerial,
};


S_USBD_INFO_T gsInfo = {
    gu8DeviceDescriptor,
    gu8ConfigDescriptor,
    gpu8UsbString,
};


